package com.lql.tree;

/**
 * 数组顺序存储二叉树（树转为数组存储后实现前序遍历）
 */
public class ArrayBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 7};
        ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree(arr);
        arrayBinaryTree.preOrder();
    }
}

class ArrayBinaryTree {
    private final int[] arr;

    public ArrayBinaryTree(int[] arr) {
        this.arr = arr;
    }

    /**
     * 重载preOrder
     */
    public void preOrder() {
        this.preOrder(0);
    }

    /**
     * 实现前序遍历
     *
     * @param index 遍历的下标
     */
    public void preOrder(int index) {
        if (arr == null || arr.length == 0) {
            System.out.println("数组为空，无法遍历");
            return;
        }
        //遍历当前节点
        System.out.println(arr[index]);
        //左递归遍历
        if ((index * 2 + 1) < arr.length) {
            preOrder((index * 2 + 1));
        }

        //右递归遍历
        if ((index * 2 + 2) < arr.length) {
            preOrder((index * 2 + 2));
        }
    }
}